package com.itany.corejava.code11_io.随机读写流;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * @author 石小俊
 * @date 2023年05月12日 13:33
 */
public class Test {

    public static void main(String[] args) {
        try (
                // 定义随机读写流有两种方式
                // 两种方式的区别在于第一个参数
                // 参数一:文件对象
                // 参数二:读写模式,其值有四种,常用值有两个:r与rw
                // r:只读,rw:读写
                // RandomAccessFile raf = new RandomAccessFile(new File("corejava/src/a.txt"), "r");
                // 此时的参数一:表示文件地址
                RandomAccessFile raf = new RandomAccessFile("corejava/src/a.txt", "rw");
        ) {
            System.out.println((char) raf.read());
            // 只有模式设置为rw才能写
            // 中文根据编码不同,GBK占2个字节,UTF-8占3个字节
            // 执行写入操作时,根据当前指针所在的位置开始写入内容
            // 会将已有的内容覆盖掉,覆盖的内容长度即为所写入内容的字节数
            raf.write("你好".getBytes());
            raf.write("Hello".getBytes());

            // 在读取操作时,指针初始从索引0的位置开始
            // 每次读或者写的时候,指针会随之移动
            // 获取当前指针的位置
            System.out.println("指针所在的索引位置:" + raf.getFilePointer());

            // 可以手动移动指针的位置
            raf.seek(7);
            raf.write("世界".getBytes());
            System.out.println("指针所在的索引位置:" + raf.getFilePointer());
            raf.seek(4);
            raf.write("Hello ".getBytes());
            System.out.println("指针所在的索引位置:" + raf.getFilePointer());


            raf.seek(5);

            // 设置指针向后跳过指定的字节,只能往前,不能后退
            // 即只能想指针运行的方式跳过,不能反方向跳过
            raf.skipBytes(5);
            raf.write("aaa".getBytes());
            System.out.println("指针所在的索引位置:" + raf.getFilePointer());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
